package com.wmwj.hxlj.controller;

import com.wmwj.hxlj.entity.Tag;
import com.wmwj.hxlj.entity.vo.PageResult;
import com.wmwj.hxlj.service.TagService;
import com.wmwj.hxlj.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/tags")
public class TagController {
    @Autowired
    private TagService tagService;

    /**
     * 获取所有启用的标签
     */
    @GetMapping("/getAllTags")
    public Result<List<Tag>> getAllTags() {
        try {
            List<Tag> tags = tagService.getAllEnabledTags();
            return Result.success(tags);
        } catch (Exception e) {
            return Result.error("获取标签列表失败: " + e.getMessage());
        }
    }

    /**
     * 分页查询标签
     *
     * @param page     页码，从1开始
     * @param size     每页大小
     * @param keyword  查询关键词，用于模糊匹配标签名称和ID
     * @return 包含分页信息和标签列表的分页结果对象
     */
    @GetMapping("/list")
    public Result<PageResult> getTags(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer size,
            @RequestParam(required = false) String keyword) {
        return tagService.getTags(page, size, keyword);
    }

    /**
     * 获取使用次数最多的标签
     */
    @GetMapping("/mostUsedTags")
    public Result<List<Tag>> getMostUsedTags(@RequestParam int limit) {
        try {
            List<Tag> tags = tagService.getMostUsedTags(limit);
            return Result.success(tags);
        } catch (Exception e) {
            return Result.error("获取使用次数最多的标签失败: " + e.getMessage());
        }
    }

    /**
     * 添加标签
     */
    @PostMapping("/add")
    public Result<Tag> addTag(@RequestBody Tag tag) {
            return tagService.addTag(tag);
    }

    /**
     * 批量增加标签使用次数
     */
    @PostMapping("/batchIncrementUseCount")
    public Result<String> batchIncrementUseCount(@RequestBody String[] names) {
        boolean success = tagService.batchIncrementTagUseCount(names);
        if (success) {
            return Result.success("批量增加使用次数成功");
        } else {
            return Result.error("批量增加使用次数失败");
        }
    }

    /**
     * 批量减少标签使用次数
     */
    @PostMapping("/batchDecrementUseCount")
    public Result<String> batchDecrementUseCount(@RequestBody String[] names) {
        boolean success = tagService.batchDecrementTagUseCount(names);
        if (success) {
            return Result.success("批量减少使用次数成功");
        } else {
            return Result.error("批量减少使用次数失败");
        }
    }

    /**
     * 删除标签
     */
    @DeleteMapping("/delete/{id}")
    public Result<String> deleteTag(@PathVariable Long id) {
        return tagService.deleteTag(id);
    }

    /**
     * 更新标签
     */
    @PutMapping("/updateTag")
    public Result<Tag> updateTag(@RequestBody Tag tag){
        return tagService.updateTag(tag);
    }
}